/**
 * MCP工具 - CLI主模块
 */

const serviceManager = require('./services/serviceManager');
const configUtils = require('./utils/config');
const logger = require('./utils/logger');

/**
 * MCP工具主类
 */
class MCP {
  constructor() {
    this.config = null;
  }

  /**
   * 初始化配置
   * @param {Object} options - 配置选项
   * @returns {Promise<void>}
   */
  async initialize(options = {}) {
    this.config = await configUtils.loadConfig(options);
    
    if (options.debug) {
      logger.setLevel('debug');
      logger.debug('MCP工具已初始化，调试模式已启用');
    }
    
    logger.debug('MCP工具初始化完成');
  }

  /**
   * 启动服务
   * @param {string|null} service - 服务名称或null表示全部
   * @returns {Promise<boolean>} 是否启动成功
   */
  async start(service = null) {
    if (!this.config) {
      await this.initialize();
    }
    
    return serviceManager.startServices(service, this.config);
  }

  /**
   * 停止服务
   * @param {string|null} service - 服务名称或null表示全部
   * @returns {Promise<boolean>} 是否停止成功
   */
  async stop(service = null) {
    return serviceManager.stopServices(service);
  }

  /**
   * 检查服务状态
   * @returns {Promise<Object>} 服务状态
   */
  async status() {
    return serviceManager.checkServices();
  }

  /**
   * 获取服务信息
   * @returns {Object} 服务信息
   */
  getServiceInfo() {
    return serviceManager.getServiceInfo();
  }
}

// 导出单例实例和类
const mcp = new MCP();
module.exports = mcp;
module.exports.MCP = MCP;

// 导出主要函数供直接使用
module.exports.start = (service) => mcp.start(service);
module.exports.stop = (service) => mcp.stop(service);
module.exports.status = () => mcp.status();
module.exports.getServiceInfo = () => mcp.getServiceInfo();
module.exports.initialize = (options) => mcp.initialize(options);